package zug;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Vector;

import steuerung.Ablaufsteuerung;

import anlage.Anlage;
import anlage.AnlageObjekt;

/**
 * 
 * @author Nilientes
 *
 */
public class Zug extends AnlageObjekt implements Serializable{
	
	/**
	 * 
	 */
	public ArrayList<Waggon> waggons;
	
	/**
	 * 
	 * @param steuerung
	 * @param id
	 * @param varsoll
	 * @param varist
	 * @param belegt
	 */
	public Zug(Ablaufsteuerung steuerung, int id, String varsoll, String varist, String belegt) {
		super(steuerung, id, varsoll, varist, belegt);
		
		waggons = new ArrayList<Waggon>();
	}

	/**
	 * 
	 * @param size
	 */
	public void zufaelligErstellen(int size)
	{
		waggons.clear();
		
		for(int i=0;i<size;i++)
		{
			waggons.add(new Waggon(""+(i+1),
					Anlage.getAnlage().wagentypen.get(
							(int)(Math.random() * Anlage.getAnlage().wagentypen.size())),
					(int)(Math.random()*6)+1));
		}
	}
	
	/**
	 * 
	 * @return returns the data of the Train as doubleVector, that fits to the DefaultTableModel data description
	 */
	public Vector<Vector<String>> getTableData()
	{
		Vector<Vector<String>> r = new Vector<Vector<String>>();
		
		int c=1;
		
		for(Waggon w : waggons)
		{
			Vector<String> wg = new Vector<String>();
			wg.add(""+c);
			
			wg.add(""+w.getRichtungsgleis());
			wg.add(""+w.getTyp().getName());
			wg.add(w.getZusatzinfo());
			wg.add(w.getFehlerinfo());
			
			r.add(wg);
			c++;
		}
		
		return r;
	}
	
	/**
	 * 
	 * @return returns the data of the Train as doubleVector, that fits to the DefaultTableModel data description. WaggonTypeID and WaggonID are separated
	 */
	public Vector<Vector<String>> getTableDataEx()
	{
		Vector<Vector<String>> ret = getTableData();

		
		return ret;
	}
	
	/**
	 * 
	 * @param v
	 */
	public void setTableData(Vector<Vector<Object>> v)
	{
		waggons.clear();
		
		for(Vector<Object> vo : v)
		{
			Waggontyp wt=null;
			for(Waggontyp w :Anlage.getAnlage().wagentypen)
				if(w.getName().equals(((String)vo.get(2))))
					wt=w;
			
			Waggon w = new Waggon(((String)vo.get(0)),
					wt,
					Integer.parseInt((String)(vo.get(1))));
			w.setZusatzinfo(((String)vo.get(3)));
			w.setFehlerinfo(((String)vo.get(4)));
			waggons.add(w);
		}
		
		if(waggons.size()>=1)
			waggons.get(waggons.size()-1).addZusatzinfo("E");
	}
	
	public void save()
	{
		
	}
	
	
}
